package com.kuanrf.upload.action;

import java.io.File;
import java.net.URL;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.kuanrf.common.base.BaseActionSupport;
import com.kuanrf.common.tools.FileTools;
import com.kuanrf.common.tools.StringTools;
import com.kuanrf.common.util.PropertyUtils;

/**
 * 文件服务-删除文件
 * 
 * @author  chenlujun
 * @version  [版本号, 2014-11-7]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class DeleteFileAction extends BaseActionSupport {

	private static final long serialVersionUID = 4177124159190574788L;
    
	 private final Log logger = LogFactory.getLog(getClass());
	
    /**
     * 文件上传路径
     */
    private String filePath;

    /**
     * 文件完整根路径
     */
    private String fullRootPath="";
    
    /**
     *默认根目录
     */
    private String defaultRoot;
    
    /**
     * <默认构造函数>
     */
    public DeleteFileAction()
    {
        super();
        fullRootPath = PropertyUtils.getValue("file.upload.rootPath");
        defaultRoot = PropertyUtils.getValue("file.upload.defaultPath");
    }
    
    /**
     * 根据文件路径删除文件
     * @return
     * @throws Exception
     */
    @Override
    public String execute() throws Exception
    {
        //检查请求消息头
        boolean ckr = super.checkRequestHeader();
        if (!ckr)
        {
            return null;
        }
        if (StringTools.isNullOrNone(filePath))
        {
            return null;
        }
        String fullFilePath = null;//文件本地保存路径
        
        //如果文件路径是URL，则需要解析后删除
        if (filePath.toLowerCase().startsWith("http:"))
        {
            URL url = new URL(filePath);
            fullFilePath = url.getPath();
            fullFilePath = fullRootPath + fullFilePath;
        }
        else
        {
        	fullFilePath = filePath + defaultRoot;
            
            if (!filePath.startsWith("/"))
            {
                fullFilePath = fullFilePath + "/" + filePath;
            }
            else
            {
                fullFilePath = fullFilePath + filePath;
            }
        }
        
        try
        {
            File file = new File(fullFilePath);
            if (file.exists())
            {
            	String parentPath=file.getParent();
            	parentPath=FileTools.getPath(parentPath);
                file.delete();
                //删除空文件夹
                while(true)
                {
                	parentPath=delFolder(parentPath);
                	if(null==parentPath)
                	{
                		break;
                	}
                }
            }
        }
        catch (Exception e)
        {
        	logger.error("删除文件出错，"+e);
        }
        //如果删除成功则
        return ajax("SUCCESS", "text/html");
    }
    
    /** 删除空文件夹
     * @see [类、类#方法、类#成员]
     */
    public String delFolder(String path)
    {
    	//文件服务根目录不能删除
    	if(path.equals(fullRootPath))
    	{
    		return null;
    	}
    	
    	//有文件不能删除
    	File floder = new File(path);
    	if(floder.isFile())
    	{
    		return null;
    	}
    	
    	//没有子文件及文件夹才能删除
    	File[] files=floder.listFiles();
    	if(null==files||files.length==0)
    	{
    		String parentPath=floder.getParent();
    		parentPath=FileTools.getPath(parentPath);
    		floder.delete();
    		return parentPath;
    	}
    	return null;
    }
    
    /**
     * @return 返回 filePath
     */
    public String getFilePath()
    {
        return filePath;
    }
    
    /**
     * @param 对filePath进行赋值
     */
    public void setFilePath(String filePath)
    {
        this.filePath = filePath;
    }
    
    
}
